home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
-
- # $Id: poff,v 1.8 1999/08/28 16:34:51 phil Exp $
- # Written by John Hasler <john@dhh.gt.org> and based on work
- # by Phil Hands <phil@hands.com>. Distributed under the GNU GPL
-
- if [ -x /usr/bin/kill ]; then
- KILL="/usr/bin/kill"
- else
- KILL="/bin/kill"
- fi
- SIG=TERM
- DONE="stopped"
- MODE=""
-
- usage ()
- {
- cat <<!EOF!
- usage: $0 [option] [provider]
- options:
- -r Cause pppd to drop the line and redial.
- -d Toggle the state of pppd's debug option.
- -c Cause pppd to renegotiate compression.
- -a Stop all pppd's. 'provider' will be ignored.
- -h Print this help summary and exit.
- -v Print version and exit.
- none Stop pppd.
-
- Options may not be combined.
-
- If 'provider' is omitted pppd will be stopped or signalled if and only if
- there is exactly one running unless the '-a' option was given. If
- 'provider' is supplied the pppd controlling the connection to that
- provider will be stopped or signalled.
- !EOF!
- }
-
- # Get option. If there are none replace the "?" that getopts puts in
- # FLAG on error with "null".
- getopts rdcavh FLAG
- if [ "$?" -ne 0 ]; then
- FLAG="null"
- fi
-
- # Check for additional options. Should be none.
- getopts :rdcavh DUMMY
- if [ "$?" -eq 0 ]; then
- echo "$0: Illegal option -- ${OPTARG}."
- exit 1
- fi
-
- case $FLAG in
- "r") SIG=HUP; DONE=signalled; shift ;;
- "d") SIG=USR1; DONE=signalled; shift ;;
- "c") SIG=USR2; DONE=signalled; shift ;;
- "a") MODE="all"; shift ;;
- "v") echo "$0$Revision: 1.8 $_TrickToPrint_RCS_Revision"; exit 0 ;;
- "h") usage; exit 0 ;;
- "?") exit 1;
- esac
-
- # Get the PIDs of all the pppds running. Could also get these from
- # /var/run, but pppd doesn't create .pid files until ppp is up.
- PIDS=$(pidof pppd)
-
- # poff is pointless if pppd isn't running.
- if [ -z "$PIDS" ]; then
- echo "$0: No pppd is running. None ${DONE}."
- exit 1
- fi
-
- # Find out how many pppd's are running.
- N=$(echo "$PIDS" | wc -w)
-
- # If there are no arguments we can't do anything if there is more than one
- # pppd running.
- if [ "$#" -eq 0 -a "$N" -gt 1 -a $FLAG != "a" ]; then
- echo "$0: More than one pppd running and no "-a" option and
- no arguments supplied. Nothing ${DONE}."
- exit 1
- fi
-
- # If either there are no arguments or '-a' was specified kill all the
- # pppd's.
- if [ "$#" -eq 0 -o "$MODE" = "all" ]; then
- $KILL -$SIG $PIDS || {
- echo "$0: $KILL failed. None ${DONE}."
- exit 1
- }
- exit 0
- fi
-
- # There is an argument, so kill the pppd started on that provider.
- PEER=$(echo $1 | sed -e 's#/#\\/#g')
- PID=$(ps -o pid,cmd axw | awk "/^ *[0-9]* *(\/usr\/sbin\/)?pppd call $PEER( |\$)/ {print \$1}")
-
- if [ "$PID" ]; then
- $KILL -$SIG $PID || {
- echo "$0: $KILL failed. None ${DONE}."
- exit 1
- }
- else
- echo "$0: I could not find a pppd process for provider '$1'. None ${DONE}."
- exit 1
- fi
-
- exit 0
-